package top.zuli.package01.class06;

/**
 * 值传递，基本类型和引用类型的区别
 */
public class MethodDemo3 {
    //传递基本类型传递的是值的副本，方法体内改变参数的值不会影响外部变量
    void method1(int i){
        //改变参数值
        i++;
        System.out.println(i);
    }
    //传递引用类型传递的是值的副本，但是值的副本和外部变量却指向堆内存同一块内存地址
    //所以改变改变User2地址的内容，外部的对象的属性也就变了
    void method2(User2 User2){
        User2.id = 2;
        User2.name = "李四";
        User2.show();
    }

    public static void main(String[] args) {
        MethodDemo3 MethodDemo3 = new MethodDemo3();
        //传递基本类型传递的是值的副本，方法体内改变参数的值不会影响外部变量
        int i = 1;
        MethodDemo3.method1(i);
        System.out.println(i);
        //传递引用类型传递的是值的副本，但是值的副本和外部变量却指向堆内存同一块内存地址
        //所以改变改变User2地址的内容，外部的对象的属性也就变了
        User2 User2 = new User2();
        User2.id = 1;
        User2.name = "张三";
        MethodDemo3.method2(User2);
        User2.show();

    }

}
class User2 {
    int id;
    String name;
    void show(){
        System.out.println("id:"+id+",name:"+name);
    }
}

